'\" te
.\"  Copyright 1989 AT&T
.\" Copyright (C) 1999, Sun Microsystems, Inc.
.\" All Rights Reserved
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH ICMP 4P "Dec 03, 2015"
.SH NAME
icmp, ICMP \- Internet Control Message Protocol
.SH SYNOPSIS
.LP
.nf
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip_icmp.h>
s = socket(AF_INET, SOCK_RAW, proto);
t = t_open("/dev/icmp", O_RDWR);
.fi

.SH DESCRIPTION
.LP
\fBICMP\fR is the error and control message protocol used by the Internet
protocol family. It is used by the kernel to handle and report errors in
protocol processing. It may also be accessed by programs using the socket
interface or the Transport Level Interface (\fBTLI\fR) for network monitoring
and diagnostic functions. When used with the socket interface, a "raw socket"
type is used. The protocol number for \fBICMP,\fR used in the \fIproto\fR
parameter to the socket call, can be obtained from
\fBgetprotobyname\fR(3SOCKET). \fBICMP\fR file descriptors and sockets are
connectionless, and are normally used with the \fBt_sndudata\fR /
\fBt_rcvudata\fR and the \fBsendto()\fR / \fBrecvfrom()\fR calls. In order to
send \fBICMP\fR packets, a process needs the \fBPRIV_NET_ICMPACCESS\fR
privilege. (See \fBprivileges\fR(7) for more information on privileges.)
.sp
.LP
Outgoing packets automatically have an Internet Protocol (\fBIP\fR) header
prepended to them. Incoming packets are provided to the user with the \fBIP\fR
header and options intact.
.sp
.LP
\fBICMP\fR is an datagram protocol layered above \fBIP.\fR It is used
internally by the protocol code for various purposes including routing, fault
isolation, and congestion control. Receipt of an \fBICMP\fR "redirect" message
will add a new entry in the routing table, or modify an existing one.
\fBICMP\fR messages are routinely sent by the protocol code. Received
\fBICMP\fR messages may be reflected back to users of higher-level protocols
such as \fBTCP\fR or \fBUDP\fR as error returns from system calls. A copy of
all \fBICMP\fR message received by the system is provided to every holder of an
open \fBICMP\fR socket or \fBTLI\fR descriptor.
.SH SEE ALSO
.LP
.BR t_rcvudata (3NSL),
.BR t_sndudata (3NSL),
.BR getprotobyname (3SOCKET),
.BR recv (3SOCKET),
.BR send (3SOCKET),
.BR inet (4P),
.BR ip (4P),
.BR routing (4P),
.BR privileges (7)
.sp
.LP
Postel, Jon, \fIInternet Control Message Protocol \(em DARPA Internet Program
Protocol Specification\fR, \fBRFC\fR 792, Network Information Center, \fBSRI\fR
International, Menlo Park, Calif., September 1981.
.SH DIAGNOSTICS
.LP
A socket operation may fail with one of the following errors returned:
.sp
.ne 2
.na
\fB\fBEISCONN\fR\fR
.ad
.RS 17n
An attempt was made to establish a connection on a socket which already has
one, or when trying to send a datagram with the destination address specified
and the socket is already connected.
.RE

.sp
.ne 2
.na
\fB\fBENOTCONN\fR\fR
.ad
.RS 17n
An attempt was made to send a datagram, but no destination address is
specified, and the socket has not been connected.
.RE

.sp
.ne 2
.na
\fB\fBENOBUFS\fR\fR
.ad
.RS 17n
The system ran out of memory for an internal data structure.
.RE

.sp
.ne 2
.na
\fB\fBEADDRNOTAVAIL\fR\fR
.ad
.RS 17n
An attempt was made to create a socket with a network address for which no
network interface exists.
.RE

.SH NOTES
.LP
Replies to \fBICMP\fR "echo" messages which are source routed are not sent back
using inverted source routes, but rather go back through the normal routing
mechanisms.
